<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>netty channel代码阅读</title>
    <style>
        body{background-color: #c7edcc;}
    </style>
</head>
<body>
<pre>
    io.netty.channel.Channel

    Channel是一个具有读,写,连接,绑定等I/O功能组件,对用户来说具有以下功能:
    1.查看连接状态,打开还是关闭
    2.I/O操作,读写等
    3.ChannelPipeline,处理io请求的组件

    所有io操作是异步的,调用会立即返回,但是netty不保证io操作一定完成,可以使用future获取操作结果

    io.netty.channel.AbstractChannel 采用template-method, 实现channel的骨骼实现

    当调用channel的write方法,msg对象会经历pipleline这个责任链,里面会对这个消息对象操作(比如encoder),比如从一个对象
    转换为一个字符串

    pipleline采用链表实现的一个责任链.默认添加了head(outboundHandler)和tail(inboundHandler)两个默认handler, head完成数据读取和发送,tail
    用于当异常没有捕获时提示

    当一个请求来到服务器时,首先进入pipleline的head,处理后如果需要进入下一个channelHandler调用fireChannel*()
    会调用pipleline中的下一个对应的方法来处理


     io.netty.channel.Channel中定义了一个内部接口,完成实际的网络传输,该接口的方法只能在I/O线程中使用
     /**
     * <em>Unsafe</em> operations that should <em>never</em> be called from user-code. These methods
     * are only provided to implement the actual transport, and must be invoked from an I/O thread except for the
     * following methods:
     * <ul>
    *   <li>{@link #localAddress()}</li>
    *   <li>{@link #remoteAddress()}</li>
    *   <li>{@link #closeForcibly()}</li>
    *   <li>{@link #register(EventLoop, ChannelPromise)}</li>
    *   <li>{@link #voidPromise()}</li>
    * </ul>
     */
    interface Unsafe


    Channel Unsafe
    AbstractChannel AbstractUnsafe
    AbstractNioChannel AbstractNioUnsafe
    AbstractNioByteChannel NioByteUnsafe
    NioSocketChannel NioSocketChannelUnsafe  该层完成java nio操作
    一个java nio 的channel继承结构

</pre>
</body>
</html>